#ifndef _OBJECT_H_
#define _OBJECT_H_

#include  "Tile.h"

/**
  * @class Object
  * @brief Objet sur une carte TMX
  */
class Object {
private :
	const char* _objectGroupName ;
	const char* _name ;
	const char* _type ;
    int _width ;
    int _height ;
    int _x ;
    int _y ;
    const Tile* _tile ;
public :
    /**
      * @brief Constructeur
      *
      * @param objectGroupName : nom du groupe d'objets proprietaire
      * @param name : nom de l'objet
      * @param x : abscisse de l'objet
      * @param y : ordonnee de l'objet
      * @param width : largeur de l'objet, en pixel
      * @param height : hauteur de l'objet, en pixel
      */
    Object(const char* objectGroupName, const char* name, int x, int y, int width, int height) :
            _objectGroupName(objectGroupName), _name(name), _width(width),_height(height), _x(x), _y(y)  {}
    /**
      * @brief Associe une ressource à l'objet
      *
      * @param tile : Ressource
      */
    void setTile(const Tile& tile) {
        _tile = &tile ;
    }
    /**
      * @brief Associe un type à l'objet
      *
      * @param type : Type de l'objet
      */
    void setType(const char* type) {
        _type = type ;
    }
    /**
      * @brief Groupe d'objets proprietaire de l'objet
      *
      * @return Le nom du groupe
      */
    const char* objectGroupName() const {
        return _objectGroupName ;
    }
    /**
      * @brief Nom de l'objet
      *
      * @return Le nom de l'objet
      */
    const char* name() const {
        return _name ;
    }
    /**
      * @brief Type de l'objet
      *
      * @return Le type de l'objet
      */
    const char* type() const {
        return _type ;
    }
    /**
      * @brief Abscisse de l'objet
      *
      * @return L'abscisse de l'objet
      */
    int x() const {
        return _x ;
    }
    /**
      * @brief Ordonnee de l'objet
      *
      * @return L'ordonnee de l'objet
      */
    int y() const {
        return _y ;
    }
    /**
      * @brief Largeur de l'objet, en pixel
      *
      * @return La largeur de l'objet
      */
    int width() const {
        return _width ;
    }
    /**
      * @brief Hauteur de l'objet, en pixel
      *
      * @return La hauteur de l'objet
      */
    int height() const {
        return _height ;
    }
    /**
      * @brief Ressource associeee à l'objet
      *
      * @return Un pointeur sur la ressource associee, NULL si aucune ressource
      */
    const Tile* tile() const {
        return _tile ;
    }
    /**
      * @brief L'objet a-t-il une ressource associee
      *
      * @return Vrai si l'objet a une ressource associee, faux sinon
      */
    bool hasTile() const {
        return _tile != NULL ;
    }
    /**
      * @brief L'objet a-t-il un type
      *
      * @return Vrai si l'objet a un type, faux sinon
      */
    bool hasType() const {
        return _type != NULL ;
    }
};

#endif // _OBJECT_H_
